const crypto = require('crypto');
const jwt = require('jsonwebtoken');

module.exports = {
    /**
     * 加密明文密码
     * @param {string} rawPassword 要加密的明文密码
     */
    passwordEncoder(rawPassword) {
        return crypto
            .createHmac('sha256', this.app.config.keys)
            .update(rawPassword)
            .digest('hex');
    },

    /**
     *  生成 token 令牌
     * @param {object} data 要保存到 token 中的信息，一定要是简单对象
     */
    genToken(data) {
        return jwt.sign(data, this.app.config.keys, { expiresIn: '2h' });
    },

    /**
     * 校验并解析 token 令牌
     * @param {string} token 要校验的 token 字符串
     */
    checkToken(token) {
        return jwt.verify(token, this.app.config.keys);
    },

    /**
     * 统一响应体
     */
    success(code = 200, message = '请求成功', data = null) {
        if (data) {
            this.ctx.body = {
                code,
                data,
                message,
            };
        } else {
            this.ctx.body = {
                code,
                message,
            };
        }
    },

    /**
     * 响应失败
     */
    fail(code, message) {
        this.ctx.body = {
            code,
            message,
        };
    },
};
